package com.dxl.system.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.dxl.base.Result;
import com.dxl.system.model.Note;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * <b> 文件服务接口
 * </b><br><br><i>Description</i> :
 * <br>Date: 2019-09-25    <br>Author : dxl
 */
public interface NoteService extends IService<Note>   {

    /**
     * <b> 上传文件
     * </b><br><br><i>Description</i> : 不能为空：文件标题-note_title ；不能重复：文件标题-note_title
     * @return String
     * <br><br>Date: 2019-09-25    <br>Author : dxl
     */
    public Result upOne(MultipartFile multipartfile, String noteNote, Integer groupId, Integer seriesId, String typeSuffix, Integer typeId);
    /**
     * <b> 插入文件
     * </b><br><br><i>Description</i> : 不能为空：文件标题-note_title ；不能重复：文件标题-note_title  
     * @param note Note
     * @return com.dxl.base.Result Note
     * <br><br>Date: 2019-09-25    <br>Author : dxl
     */
    public Result addOne(Note note);

    /**
     * <b> 分配标签给文件
     * </b><br><br><i>Description</i> :
     * @param noteId Integer，labelIds -List: Integer
     * @return com.dxl.base.Result Note
     * <br><br>Date: 2019-09-25    <br>Author : dxl
     */
    public Result addLabelToNote(Integer noteId, List<Integer> labelIds);

    /**
     * <b> 删除文件
     * </b><br><br><i>Description</i> : 
     * @param noteIds List: Integer
     * @return com.dxl.base.Result int
     * <br><br>Date: 2019-09-25    <br>Author : dxl
     */
    public Result delByIds(List<Integer> noteIds);

    /**
      * <b> 删除文件及文件（md 和 html）
      * </b><br><br><i>Description</i> :
      * @param noteIds
      * @return com.dxl.base.Result
      * <br><br>Date: 2019/10/1 19:35    <br>Author : dxl
      */
    public Result delAndFile(List<Integer> noteIds);

    /**
     * <b> 移除文件中标签
     * </b><br><br><i>Description</i> :
     * @param noteId Integer，labelIds -List: Integer
     * @return com.dxl.base.Result int
     * <br><br>Date: 2019-09-25    <br>Author : dxl
     */
    public Result delLabelFromNote(Integer noteId, List<Integer> labelIds);

    /**
     * <b> 移除文件中全部标签
     * </b><br><br><i>Description</i> :
     * @param noteId Integer
     * @return com.dxl.base.Result int
     * <br><br>Date: 2019-09-25    <br>Author : dxl
     */
    public Result delAllLabelFromNote(Integer noteId);

    /**
     * <b> 编辑文件
     * </b><br><br><i>Description</i> : 不能重复：文件标题-note_title 
     * @param note Note
     * @return com.dxl.base.Result Note
     * <br><br>Date: 2019-09-25    <br>Author : dxl
     */
    public Result editOne(Note note);

    /**
     * <b> ID查询文件
     * </b><br><br><i>Description</i> : 
     * @param noteId Integer
     * @return com.dxl.base.Result: Note
     * <br><br>Date: 2019-09-25    <br>Author : dxl
     */
    public Result getById(Integer noteId);

    /**
     * <b> 条件查询文件
     * </b><br><br><i>Description</i> : 
     * @param note Note
     * @return com.dxl.base.Result List: Note
     * <br><br>Date: 2019-09-25    <br>Author : dxl
     */
    public Result getList(Note note);

    /**
     * <b> 分页条件查询文件
     * </b><br><br><i>Description</i> : 
     * @param note Note, currentPage -Integer, pageSize -Integer
     * @return com.dxl.base.Result List: Note
     * <br><br>Date: 2019-09-25     <br>Author : dxl
     */
    public Result getListByPage(Note note, Integer currentPage, Integer pageSize);

    /**
     * <b> 条件查询分组及子分组所有文件
     * </b><br><br><i>Description</i> :
     * @param note Note
     * @return com.dxl.base.Result List: Note
     * <br><br>Date: 2019-09-25    <br>Author : dxl
     */
    public Result getListAllInGroup(Note note,List<Integer> groupIdList);

    /**
     * <b> 分页条件查询分组及子分组所有文件
     * </b><br><br><i>Description</i> :
     * @param note Note, currentPage -Integer, pageSize -Integer
     * @return com.dxl.base.Result List: Note
     * <br><br>Date: 2019-09-25     <br>Author : dxl
     */
    public Result getListAllInGroupByPage(Note note, Integer currentPage, Integer pageSize);

    /**
     * <b> 查询文件中全部标签
     * </b><br><br><i>Description</i> : 联表
     * @param noteId Integer
     * @return com.dxl.base.Result List: Label
     * <br><br>Date: 2019-09-25    <br>Author : dxl
     */
    public Result getAllLabelInNote(Integer noteId);

    /**
     * <b> 分页查询文件中全部标签
     * </b><br><br><i>Description</i> : 联表
     * @param noteId Integer, currentPage -Integer, pageSize -Integer
     * @return com.dxl.base.Result List: Label
     * <br><br>Date: 2019-09-25    <br>Author : dxl
     */
    public Result getAllLabelInNoteByPage(Integer noteId, Integer currentPage, Integer pageSize);

    /**
     * <b>  模糊查询文件
     * </b><br><br><i>Description</i> : 模糊查询；模糊字段(模式：单字段)：全匹配：note_title-文件标题 note-备注 
     * @param note Note
     * @return com.dxl.base.Result List: Note
     * <br><br>Date: 2019-09-25    <br>Author : dxl
     */
    public Result getLikeNote(Note note);

    /**
     * <b> 分页模糊查询文件
     * </b><br><br><i>Description</i> : 模糊查询；模糊字段(模式：单字段)：全匹配：note_title-文件标题 note-备注 
     * @param note Note, currentPage -Integer, pageSize -Integer
     * @return com.dxl.base.Result List: Note
     * <br><br>Date: 2019-09-25     <br>Author : dxl
     */
    public Result getLikeNoteByPage(Note note, Integer currentPage, Integer pageSize);

    /**
     * <b>  联表查询文件
     * </b><br><br><i>Description</i> : 联表查询，联表：标签文件关联 标签
     * @param note Note
     * @return com.dxl.base.Result List: Note
     * <br><br>Date: 2019-09-29    <br>Author : dxl
     */
    public Result getJoinLabelSeries(Note note);

    /**
     * <b> 分页联表查询文件
     * </b><br><br><i>Description</i> : 联表查询，联表：标签文件关联 标签
     * @param note Note, currentPage -Integer, pageSize -Integer
     * @return com.dxl.base.Result List: Note
     * <br><br>Date: 2019-09-29     <br>Author : dxl
     */
    public Result getJoinLabelSeriesByPage(Note note, Integer currentPage, Integer pageSize);


    /**
     * <b> 文件能否新增
     * </b><br><br><i>Description</i> : 不能为空：文件标题-note_title ；不能重复：文件标题-note_title  
     * @param note Note
     * @return com.dxl.base.Result boolean
     * <br><br>Date: 2019-09-25     <br>Author : dxl
     */
    public Result isNoteAddable(Note note);

    /**
     * <b> 文件能否编辑
     * </b><br><br><i>Description</i> : 不能重复：文件标题-note_title 
     * @param note Note
     * @return com.dxl.base.Result boolean
     * <br><br>Date: 2019-09-25     <br>Author : dxl
     */
    public Result isNoteEditable(Note note);

    public List<Note> handleNote(List<Note> noteList);

}
